pipeline {
    agent {
        // Kubernetes Plugin
        // 使用yamlFile作为podTemplate生成agent pod，默认container为 defaultContainer 'maven'
        kubernetes {
            defaultContainer 'maven'
            yamlFile 'podTemplates/maven-3.8.3-openjdk-8.yaml'
        }
    }
    triggers {
        // curl -X POST 
        // -H "Content-Type: application/json" 
        // -d ' { "repository": { "git_http_url": "http://code.example.com" }, "ref": "refs/heads/master" }' 
        // -vs http://jenkins.example.com:32203/generic-webhook-trigger/invoke?token=guestbook-pipeline
        // GWT(GenericWebhookTrggier)
        GenericTrigger(
            // 提取webhook请求body中的参数，默认使用JsonPath提取
            genericVariables: [
                [key: 'ref', value: '$.ref'],
                [key: 'git_http_url', value: '$.repository.git_http_url']
            ],
            // 从webhook的url中获取token参数，触发指定的Jenkins项目
            token: env.JOB_NAME,

            // 根据请求参数$.ref判断是否触发Jenkins项目
            regexpFilterText: '$ref',
            regexpFilterExpression: 'refs/heads/[master|dev]',

            // 触发原因，可以直接引用提取后的变量
            causeString: 'Triggered on $ref',

            // 将提取后变量名和变量值打印出来
            printContributedVariables: true,

            // 将webhook请求信息打印出来
            printPostContent: true,

            // 只返回触发的HTTP状态码，不返回结果
            silentResponse: false,
            
        )
    }
    stages {
        stage('Code Clone') {
            steps {
                // 默认steps都会在defaultContainer中执行，除非指定container，例如：container('git') {}
                container('git'){
                    // 使用GWT时候打开
                    script {
                        // def gitRef = "$ref"
                        // def gitUrl = "$git_http_url"
                        // def gitBranch = gitRef.substring(gitRef.lastIndexOf('/')+1)
                        // echo "$gitRef"
                        // echo "$gitUrl"
                        // echo "$gitBranch"
                        // git branch: gitBranch, url: gitUrl
                        git 'https://gitee.com/zheng11581/Guestbook-microservices-k8s.git'
                    }
                    
                    script {
                        build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
                    }
                }
                echo "${build_tag}"
            }
        }
        stage('Run Sonar Scanner') {
            steps {
                // 使用全局工具：sonarscanner4.6
                // script {
                //     def sonarScannerHome = tool name: "sonarscanner4.6", type: "hudson.plugins.sonar.SonarRunnerInstallation"
                //     withSonarQubeEnv('sonarqube') {
                //         sh "${sonarScannerHome}/bin/sonar-scanner -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_AUTH_TOKEN}"
                //     }
                            
                // }
                // 使用动态agent节点：container('sonar-scanner')
                container('sonar-scanner') {
                    withSonarQubeEnv('sonarqube') {
                        sh "sonar-scanner -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_AUTH_TOKEN}"
                    }
                }

            }

        }
        // 时间太长了，注释掉        
        // stage('Run PMD') {
        //     steps {
        //         sh 'mvn pmd:pmd'
        //     }
        //     post {
        //         always { 
        //             recordIssues tools: [pmdParser()]
        //         }
        //     }
        // }
        // 时间太长了，注释掉
        // stage('Run Maven Build') {
        //     steps {
        //         sh 'mvn clean install'
        //     }
        // }
        stage('Unit Test') {
            steps {
                echo "Start UnitTest"
                // mvn test
            }
            post {
                always { 
                    echo 'End UnitTest'
                    // Junit Plugin
                    // 发送JUnit单元测试报告到Jenkins Job
                    // junit testResults: "**/target/surfire-reports/*.xml"
                }
            }
        }

    }
}